// 1、进行递归使用 初级
// function flatten(array) {
//     var flattend = [];
//     (function flat(array) {
//       array.forEach(function(el) {
//         if (Array.isArray(el)) flat(el);
//         else flattend.push(el);
//       });
//     })(array);
//     return flattend;
//   }

// 2、增加参数控制扁平化深度 有递归也用到forEach
// forEach会跳过空位 递归的方式进行扁平化
function flatten2(arr = [], depth = 1) {
    let res = [];//注意这里一定要加分号
    (function flat(arr, depth) {
        arr.forEach((item) => {
            if (Array.isArray(item) && depth > 0) {
                flat(item, depth - 1)
            } else {
                res.push(item)
            }
        }

        )
    })(arr, depth)

    return res
}




console.log(flatten2([1, [2, , 3, [9]]], 2));

// 非递归的方式  splice + 扩展运算符来进行实现
// splice原地替换指定索引的元素，并且指定替换个数，把更换后的值传入
function flatten(arr){
    for(let i=0;i<arr.length;i++){
        if(Array.isArray(arr[i])){
            arr.splice(i,1,...arr[i])
            i--
        }
    }
    return arr
}
const arr = [1, [2, 3], [4, [5, 6]], 7];
console.log(flatten(arr)); // [1, 2, 3, 4, 5, 6, 7]
  

